package com.zmn.oms.persistence.interfaces.work;

import com.zmn.oms.model.entity.work.OrderWork;
import org.apache.ibatis.annotations.Param;

import java.util.Map;

/**
 * 类描述：工单金额持久层
 *
 * @author heciqi
 * @date 2018/11/7 20:05
 */
public interface OrderWorkAmountDao {
    /**
     * 修改预付款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updatePrepayAmount(OrderWork orderWork);
    /**
     * 自动完成订单时修改预收金额和工程师收款金额
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updatePrepayAmountAndMasterAmountPay(OrderWork orderWork);

    /**
     * 支付预付款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updatePrepayAmountPay(OrderWork orderWork);

    /**
     * 修改定金
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateDepositAmount(OrderWork orderWork);

    /**
     * 支付定金
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateDepositAmountPay(OrderWork orderWork);

    /**
     * 修改工程师收款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateMasterAmount(OrderWork orderWork);

    /**
     * 支付工程师收款
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateMasterAmountPay(OrderWork orderWork);

    /**
     * 修改优惠金额
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateDiscountAmount(OrderWork orderWork);

    /**
     * 修改退款金额
     *
     * @param orderWork
     * @return 影响行数
     */
    Integer updateRefundAmount(OrderWork orderWork);

    /**
     * 更新配件金额
     *
     * @param orderWork
     * @return
     */
    Integer updatePartAmount(OrderWork orderWork);

    /**
     * 修改工单金额 （完成之前）
     *
     * @param orderWork
     */
    void updateAmount(OrderWork orderWork);

    /**
     * 改渠道费
     *
     * @param orderWork
     */
    void updateChannelAmount(OrderWork orderWork);

    /**
     * 更新支付状态
     * @param orderWork
     */
    void updatePayStatus(OrderWork orderWork);

    /**
     * 渠道二次支付，修改预付金额
     *
     * @param updateAmount
     */
    void updateSecondChannelPay(OrderWork updateAmount);

/**
     * 修改支付状态 （更改渠道预付款）订单支付状态 工程师收款支付状态 渠道预付款支付状态
     *
     * @param updateAmount
     */
    void updatePayStatusChannelPrepay(OrderWork updateAmount);

    /**
     * 删除原价
     *
     * @param orderId
     * @param workId
     */
    void deleteOriginalAmount(@Param("orderId") Long orderId, @Param("workId") Long workId);

    /**
     * 清空价格
     * @param orderWork
     * @param fields 需要更新的属性 totalAmount、depositAmount
     */
    void updateCleanAmount(@Param("orderWork") OrderWork orderWork, @Param("fields") Map<String, Boolean> fields);

    /**
     * 支付完成之后修改原价
     * @param updateOrderWork
     */
    void updateOriginalAmountAfterPayment(OrderWork updateOrderWork);

    /**
     * 更新退款
     * @param orderWork
     * @return
     */
    int updateRefund(OrderWork orderWork);
    /**
     * 更新退款
     * @param orderWork
     * @return
     */
    int updateOriginalAndTotalAndDepositAmount(OrderWork orderWork);

    void hotfixUpdateRefundAmount(OrderWork orderWork);

    /**
     * 更新支付优惠金额
     * @param upOrderWork
     */
    void updatePayDiscountAmount(OrderWork upOrderWork);
}